from calendar import day_abbr
import time
from django.http import HttpResponse
from product.models import Product
from django.shortcuts import get_object_or_404
from django.utils import timezone
from datetime import timedelta

# 查询功能
"""
单个查询 .get()
多个查询 .all()

过滤方法 filter()


"""
def get_query_view(request):
    
    # product = Product.objects.get(pk=1)

    # 查询单个数据，不存在则返回404
    # 指定模型类，指定查询条件
    product = get_object_or_404(Product, pk=10)
    
    # try:
    #     product_name = Product.objects.get(product_name="小米13Pro")
    #     print(product_name)
    # except Product.DoesNotExist:
    #     return HttpResponse("数据不存在，请重新查询")
    
    # product.models.Product.DoesNotExist 数据在数据表中不存在
    
    return HttpResponse(f"{product.product_name}--{product.price}--{product.stock}--{product.popularity}")

def query_all_view(request):
    product = Product.objects.all()
    print(product)
    # 查询总数量
    count = Product.objects.count()
    print(count)
    return HttpResponse(f"{product}")

#  .filter(), .exclude(), 和 .get()
#  过滤 ==指定条件
def query_filter_view(request):
    # 相等查询
    # 使用 exact 进行精确匹配
    price = Product.objects.filter(price__exact=3000)

    # 模糊匹配 contains 英文字母区分大小写
    # 不区分字母大小写 icontains
    name = Product.objects.filter(product_name__contains="p")

    product_name = Product.objects.filter(product_name__icontains="p")
   
    
    # startswith, endswith 匹配开头 匹配结尾
    product_name = Product.objects.filter(product_name__startswith="小米")
    
    
    # 检查数据字段是否为空
    b =  Product.objects.filter(cover__isnull=True)

    # 查询价格在查询范围内的商品 1000， 3000 匹配整数类型 匹配1000， 匹配3000
    price = Product.objects.filter(price__in=[1000, 3000, 1699])
   
    # 使用 gt, gte, lt, lte 进行大小比较。
    # 查询价格大于1000的商品
    price = Product.objects.filter(price__gt="1000")
    price = Product.objects.filter(price__gte="1000")
    
    # 查询热度小于100的商品
    products = Product.objects.filter(popularity__lt=100)

    #  查询2025-5-7 20：11:37.196434创建的商品
    # datetime = Product.objects.filter(create_time="2025-5-7 20:11:37.196434")
    # print(datetime)
    # 查询性能比年月日要快
    years = Product.objects.filter(create_time__startswith="2025-05")
    
    # 查询2025年的数据 
    years = Product.objects.filter(create_time__year=2025)
 

    month = Product.objects.filter(create_time__month=5)
    
    
    day = Product.objects.filter(create_time__day=7)


    # 年月日查询
    years = Product.objects.filter(create_time__year=2025,create_time__month=5,create_time__day=7)

  
    # 查询今天更新的商品
    today = timezone.now().date()
    products = Product.objects.filter(create_time__date=today)
    # print(products)

    # 查询昨天更新的商品
    yesterday  = today - timedelta(days=1)
    # 2025-05-08
    # print(yesterday)
    products = Product.objects.filter(create_time__date=yesterday)
    # print(products)

    # 查询最近7天 返回大于7天前的商品
    seven_days_ago = today - timedelta(days=7)
    products = Product.objects.filter(create_time__gt=seven_days_ago)
    
    # exclude() 排除符合条件的数据 除了满足条件的数据
    products= Product.objects.exclude(product_name__startswith="小米").order_by('-price')
    print(products)
    return HttpResponse(f"{years}")
    # 集合 {}
    # <QuerySet [<Product: 商品名：雷神27英寸4K超清--状态True>, <Product: 商品名：a2奶粉 澳洲白金版--状态True>]>
    # queryset 并不是纯粹的 Python 列表，而是一个 django 的特殊数据库查询对象